GCSにファイルをアップロードしているところで
invalid_grant: Invalid JWT: Token must be a short-lived token and in a reasonable timeframe
Google OAuth2.0 認証時に JWT::InvalidIatError: Invalid iat エラーが頻発する@NOTE
これを期に認証周りの仕組みを再確認しておこう 🐼
JWTはジョットと発音するそうです。
認可にOAuth 2.0、認証にOpenID Connectを使っている https://developers.google.com/identity/protocols/OAuth2
ユーザーがアプリケーションにID・パスワードを教えることなく、アプリケーションがユーザーの代わりにユーザーデータにアクセスできるようにする仕組み
安全に 認可を取得するための認可プロセスを規定する
OAuth 2.0の仕組みに乗っかって認証の仕組みを規定したもの
※ 認可コード(AuthorizationCode)Grantの例
詳細はWebで! https://openid-foundation-japan.github.io/rfc6749.ja.html
OAuth 2.0で行われるユーザーの認証はおまけだった。OpenID Connectではアクセストークンと一緒に認証結果を返したり、アクセストークン取得後にユーザー情報を取得するためのエンドポイントに対するリクエスト・レスポンスも仕様化した。
※ OpenID Connectには3つのフローがあるが、ここではAuthorization Code Flowの例
認可コード(引換券)の取得までは同じ。
認可コードを使ってアクセストークンを取得する際に、アクセストークンと一緒にID Tokenが返される。
ID TokenにはユーザーのID(sub)等が含まれている。
それだけ。
薄くはない
invalid_grant: Invalid JWT: Token must be a short-lived token and in a reasonable timeframe
OAuth 2.0のアクセストークン取得時のエラーレスポンスに定義されているエラーコード
OpenID ConnectのID Tokenの仕様で
実装者は, クロック・キューを考慮するために, 通常は数分間以下の多少の余地を提供してもよい(MAY)
また、ID Tokenの検証で
iat Claim は現在時刻からはるか昔に発行されたトークンを拒絶するために利用でき, 攻撃を防ぐために nonce が保存される必要がある期間を制限する. 許容できる範囲は Client の仕様である.
って感じであのエラーはOAuth 2.0またはOpenID Connectの現在時刻絡みのエラーかな、ということがわかる。
OAuth 2.0 https://openid-foundation-japan.github.io/rfc6749.ja.html
OpenID Connect https://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html
Google Cloud Platform Auth ガイド https://cloud.google.com/docs/authentication
Using OAuth 2.0 to Access Google APIs https://developers.google.com/identity/protocols/OAuth2